/*
 * Copyright (c) 2017-2022 TIBCO Software Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you
 * may not use this file except in compliance with the License. You
 * may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License. See accompanying
 * LICENSE file.
 */
package org.apache.spark.sql.execution

import com.gemstone.gemfire.internal.cache.BucketRegion

import org.apache.spark.sql.catalyst.expressions.codegen.CodegenContext

/**
 * Allow invoking produce/consume calls on executor without requiring
 * a SparkContext.
 */
trait CodegenSupportOnExecutor extends CodegenSupport {

  protected final def invalidUUID: Long = BucketRegion.INVALID_UUID

  /**
   * Returns Java source code to process the rows from input RDD that
   * will work on executors too (assuming no sub-query processing required).
   */
  def produceOnExecutor(ctx: CodegenContext, parent: CodegenSupport): String = {
    this.parent = parent
    ctx.freshNamePrefix = nodeName.toLowerCase
    s"""
       |${ctx.registerComment(s"PRODUCE ON EXECUTOR: ${this.simpleString}")}
       |${doProduce(ctx)}
     """.stripMargin
  }
}
